package com.hanzidong.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class StreamUtil {
	/**
	* 功能：批量关闭流。
	*
	* @param AutoCloseable... closeables 多个可关闭的对象
	 * @throws Exception 
	*/
	public static void closings(AutoCloseable... closeables) throws Exception {
		if(closeables != null && closeables.length > 0) {
			//如果有值，则进行关流操作
			for (AutoCloseable autoCloseable : closeables) {
				autoCloseable.close();
			}
		}
	}
	
	/**
	* 功能：读取文本流，也可以将流转成字符串，默认编码为UTF-8
	*
	* @param InputStream inputStream 输入流
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	 * @throws Exception 
	*/
	public static String asString(InputStream inputStream, boolean isClose) throws Exception {
		
		return asString(inputStream,"UTF-8",isClose);
	}
	
	/**
	* 功能：读取文本流，也可以将流转成字符串
	*
	* @param InputStream inputStream 输入流
	* @param String encoding 指定编码
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	 * @throws Exception 
	*/
	public static String asString(InputStream inputStream, String encode, boolean isClose) throws Exception {
		
		StringBuffer sb = new StringBuffer();
		
		//用于读取数据的字节数组
		byte[] b =  new byte[1024];
		
		//读入数据
		int len = 0;
		
		//循环读入数据
		while((len = inputStream.read(b)) != -1) {
			//将数据存入sb中
			sb.append(new String( b, 0 , len, encode));
		}
		
		//关闭流
		if(isClose) {
			closings(inputStream);
		}
		
		return sb.toString();
	}
	
	
	/**
	* 功能：读取文本文件，默认编码为UTF-8
	*
	* @param File textFile 文本文件
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	*/
	public static String asString(File textFile, boolean isClose) throws Exception {
		
		return asString(new FileInputStream(textFile),isClose);
	}

	/**
	* 功能：读取文本文件，可以指定编码
	*
	* @param File textFile 文本文件
	* @param String encoding 指定编码
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	*/
	public static String asString(File textFile, String encode, boolean isClose) throws Exception {
		
		return asString(new FileInputStream(textFile), encode, isClose);
	}
	
	/**
	* 功能：读取文本文件，默认编码为UTF-8
	*
	* @param File textFile 文本文件
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	*/
	public static String asString(File textFile) throws Exception {
		
		return asString(new FileInputStream(textFile),true);
	}
	
	/**
	* 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8，默认关闭流
	*
	* @param File textFile 文本文件
	* @param String encode 指定编码
	* @param boolean isClose 处理完成后是否关闭流
	*
	* @return 字符串集合
	 * @throws Exception 
	*/
	public static List<String> readingLineFormTextFile(File textFile) throws Exception{
		
		List<String> list = new ArrayList();
		
		//读入数据
		String  str = null;
		
		//缓冲字符流
		BufferedReader br = null;
				
		try {
			
			br = new BufferedReader(new FileReader(textFile));
			
			//循环读取数据
			while( (str = br.readLine()) != null ) {
				//将数据存入到list中
				list.add(str);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			
		} finally {
			//一定会执行
			
			//关流
			closings(br);
		}
		
		
		return list;
	}

	/**
	* 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8
	*
	* @param File textFile 文本文件
	* @param String encode 指定编码
	*
	* @return 字符串集合
	*/
//	public static List<String> readingLineFormTextFile(File textFile, String encode) throws IOException{
//		//TODO 实现代码
//	}
	
	
}
